#include "spelare.h"
#include "pjaser/pjas.h"
#include "game.h"

#include "pjaser/kung.h"
#include "pjaser/dam.h"
#include "pjaser/torn.h"
#include "pjaser/lopare.h"
#include "pjaser/hast.h"
#include "pjaser/bonde.h"

/*---------------------------------

Spelare::Spelare( bool spelare )
Konstruktor, skapar spelaren och dess pjäser
Argument: spelarens nummer

---------------------------------*/

Spelare::Spelare( bool spelare, bool skaSkapaPjaser ) : schack( false ), spelare( spelare ) {
	if( skaSkapaPjaser ) {
		skapaPjaser( spelare );
	}
	else {
		for( int i=0; i<16; i++ ) {
			ptrArray[i] = NULL;
		}
	}
}

/*---------------------------------

Spelare::~Spelare( void )
Destruktor.

---------------------------------*/

Spelare::~Spelare( void ) {
	for( int i = 0; i < 16; i++ ) {
		if( ptrArray[i] ) {
			delete ptrArray[i];
			ptrArray[i] = NULL;
		}
	}
}

/*---------------------------------

Spelare::skapaPjaser( bool spelare )
overloadad
Skapar en spelares pjäser, för ett helt nytt spel.
Argument: spelarens nummer

---------------------------------*/

void Spelare::skapaPjaser( bool spelare ) {
	ptrArray[0] = new Kung( spelare, 4, undreRad( spelare ) );
	ptrArray[1] = new Dam( spelare, 3, undreRad( spelare ) );
	ptrArray[2] = new Torn( spelare, 0, undreRad( spelare ) );
	ptrArray[3] = new Torn( spelare, 7, undreRad( spelare ) );
	ptrArray[4] = new Lopare( spelare, 2, undreRad( spelare ) );
	ptrArray[5] = new Lopare( spelare, 5, undreRad( spelare ) );
	ptrArray[6] = new Hast( spelare, 1, undreRad( spelare ) );
	ptrArray[7] = new Hast( spelare, 6, undreRad( spelare ) );

	for( int i = 8; i <= 15; i++ ) {
		ptrArray[i] = new Bonde( spelare, i-8, ovreRad( spelare ) );
	}
}

/*---------------------------------

Spelare::taPjas( Pjas* pjas )
Radera en pjäs som inte ska finnas på planen längre
Se bara till att det inte finns några referenser till denna längre...
Argument: Adressen till en Pjäs

---------------------------------*/

void Spelare::taPjas( Pjas* pjas ) {
	for( int i = 0; i < 16; i++ ) {
		if( ptrArray[i] == pjas ) {
			delete pjas;
			ptrArray[i] = NULL;
		}
	}
}

/*---------------------------------

Spelare::kollaDrag( void )
Går genom spelarens pjäser och kallar mojligtDrag för dem.
Kallas i Game::registreraDrag och game-konstruktorn

---------------------------------*/

void Spelare::kollaDrag( void ) {
	for( int i = 0; i < 16; i++ ) {
		if( ptrArray[i] ) {
			ptrArray[i]->mojligtDrag();
		}
	}
}


